<?php
/**
 * @Author: chen
 * @Date:   2014-08-14 22:58:35
 * @Last Modified by:   chenryoku
 * @Last Modified time: 2014-11-23 17:24:09
 */
import('Class.Data',APP_PATH);
/**
 * 根据大小返回标准单位 KB  MB GB等
 */
function get_size($size, $decimals = 2)
{
    switch (true) {
        case $size >= pow(1024, 3):
            return round($size / pow(1024, 3), $decimals) . " GB";
        case $size >= pow(1024, 2):
            return round($size / pow(1024, 2), $decimals) . " MB";
        case $size >= pow(1024, 1):
            return round($size / pow(1024, 1), $decimals) . " KB";
        default:
            return $size . 'B';
    }
}

/**
 * 用户定义常量
 * @param bool $view 是否显示
 * @param bool $tplConst 是否只获取__WEB__这样的常量
 * @return array
 */
function print_const($view = true, $tplConst = false) {
    $define = get_defined_constants(true);
    $const = $define['user'];
    if ($tplConst) {
        $const = array();
        foreach ($define['user'] as $k => $d) {
            if (preg_match('/^__/', $k)) {
                $const[$k] = $d;
            }
        }
    }
    if ($view) {
        p($const);
    } else {
        return $const;
    }
}



/**
 * 打印输出数据|show的别名
 * @param void $var
 */
function p($var) {
    show($var);
}



/**
 * 打印输出数据
 * @param void $var
 */
function show($var) {
    if (is_bool($var)) {
        var_dump($var);
    } else if (is_null($var)) {
        var_dump(NULL);
    } else {
        echo "<pre style='padding:10px;border-radius:5px;background:#F5F5F5;border:1px solid #aaa;font-size:14px;line-height:18px;'>" . print_r($var, true) . "</pre>";
    }
}

/**
 * 截取长度
 * 使用自定义标签时截取字符串
 * @param $string 字符串
 * @param int $len 长度
 * @param string $end 结尾符
 * @return string
 */
function cms_substr($string, $len = 20, $end = '...')
{
    return mb_substr($string, 0, $len, 'utf-8') . $end;
}


/**
 * 获得随机字符串
 * @param int $len 长度
 * @return string
 */
function rand_str($len = 6) 
{
    $data = 'abcdefghijklmnopqrstuvwxyz0123456789';
    $str = '';
    while (strlen($str) < $len)
        $str .= substr($data, mt_rand(0, strlen($data) - 1), 1);
    return $str;
}

/**
 * [keditor 编辑器]
 * @param  [type] $param [description]
 * @return [type]        [description]
 */
function keditor($param)
{
    $name = $param['name'];
    $content = $param['content'];
    $style = isset($param['style'])?$param['style']:1;
    $str='';
    if (!defined("DJ_KEDITOR")) 
    {
        $str .="<script type='text/javascript' src='".__ROOT__."/Data/Org/Keditor/kindeditor-all-min.js'></script>
        ";
        define("DJ_KEDITOR", true);
    }
    $uploadScript=U('keditor_upload',array('SSID'=>session_id()));

    $toolbar = '';
    if($style==2)
    {

        $toolbar = '
            items :["source","code","fullscreen","|","forecolor", "bold", "italic", "underline",
        "removeformat", "|", "justifyleft", "justifycenter", "justifyright", "insertorderedlist",
        "insertunorderedlist", "|", "emoticons", "link"],'; 
        
    }   
            

    $str .=<<<php
        <script type="text/javascript">
        var optionVar ='{$name}';
        KindEditor.ready(function(K) {
                var optionVar= "editor"+optionVar;
                optionVar = K.create('#{$name}', {
                    //cssPath : '../plugins/code/prettify.css',
                    //uploadJson : '__ROOT__/Data/Org/Keditor/php/upload_json.php',
                    uploadJson : '{$uploadScript}',
                    fileManagerJson : '__ROOT__/Data/Org/Keditor/php/file_manager_json.php',
                    {$toolbar}
                    width:'99%',
                    height:'300px',
                    allowFileManager : true,
                    afterCreate : function() {
                        var self = this;
                        K.ctrl(document, 13, function() {
                            self.sync();
                            K('form[name=example]')[0].submit();
                        });
                        K.ctrl(self.edit.doc, 13, function() {
                            self.sync();
                            K('form[name=example]')[0].submit();
                        });
                    },
                    //langType:'en',
                    afterBlur: function(){this.sync();}
            });
        });
        </script>
        <textarea name="{$name}" id="{$name}" >{$content}</textarea>
php;
    return $str;

}

/**
 * [get_url 输出筛选a链接]
 * @param  [type] $key  [description]
 * @param  [type] $attr [description]
 * @return [type]       [description]
 */
function get_url($key,$attr)
{
    $s = I('get.s');
    $sArr = explode('-', $s); 

    // 当前高亮
    $cur = '';
    if($sArr[$key] == $attr['attr_value_id'])
        $cur = 'class="blue"';

    // 更改属性值
    $sArr[$key]=$attr['attr_value_id'];  

    // url
    $url = U('/products/l_'.I('get.cid').'/s_'.implode('-', $sArr));

    // 组合a链接
    echo "<a href='{$url}'>
            <span class='badge pull-right'>{$attr['count']}</span>
            <span {$cur}>{$attr['attr_value']}</span>
        </a>";
 
}

/**
 * [sendmail 发送邮件的方法]
 * @param  [type] $email [收件邮箱]
 * @param  string $title [邮件主题]
 * @param  string $body  [邮件内容]
 * @return [type]        [description]
 */
function sendmail($email,$title='',$body='')
{


    $headers  = 'MIME-Version: 1.0' . "\r\n";
    $headers .= 'Content-type: text/html; charset=utf8' . "\r\n";
    $headers .= 'From: ' . "mudy.com.cn" . "\r\n";

    //if(!mail($email,"=?UTF-8?B?".base64_encode($title)."?=", $body,$headers))
    //{

      import('Class.Smtp',APP_PATH);
      $smtp = new smtp('smtp地址',25,true,'邮箱账号','密码');
      $smtp->debug = TRUE;//是否显示发送的调试信息  
      $smtp->sendmail($email,'1邮箱账号', $title, $body, 'HTML');
    //}
}

/**
 * [postmail 使用phpmailer发送邮件]
 * @param  [type] $to       [收件箱]
 * @param  string $subject  [邮件主题]
 * @param  string $body     [邮件内容]
 * @param  [type] $consignee[收件人描述]
 * @return [type]           [description]
 */
function postmail($to,$subject = '',$body = '',$consignee='')
{
    // 导入类
    import('Class.PhpMailer.phpmailer',APP_PATH);
    import('Class.PhpMailer.smtp',APP_PATH);
    # Create object of PHPMailer
    $mail = new PHPMailer();
    $body            = eregi_replace("[\]",'',$body); //对邮件内容进行必要的过滤
    $mail->CharSet ="utf8";//设定邮件编码，默认ISO-8859-1，如果发中文此项必须设置，否则乱码
     
    // Inform class to use SMTP
    $mail->IsSMTP();
     
    // Enable this for Testing
    $mail->SMTPDebug  = 0;
     
    // Enable SMTP Authentication
    $mail->SMTPAuth   = true;
     
    // Host of the SMTP Server
    $mail->Host = "smtp地址";            //smtp地址 更改
     
    // Port of the SMTP Server
    $mail->Port = 25;
     
    // SMTP User Name
    $mail->Username   = "邮箱账号";   //邮箱账号更改
     
    // SMTP User Password
    $mail->Password = "邮箱密码"; //邮箱密码更改
     
    // Set From Email Address
    $mail->SetFrom("邮箱账号", "发件人描述"); //邮箱账号和发件人描述更改
     
    // Add Subject
    $mail->Subject    = $subject;
     
    // Add the body for mail
    $mail->MsgHTML($body);
     
    // Add To Address
    //$consignee ='收件人描述';
    $mail->AddAddress($to, $consignee); //收件人描述更改
     
     
    // Finally Send the Mail
    if(!$mail->Send())
    {
        return array('status'=>false,error=>"Mailer Error: " . $mail->ErrorInfo);
    }
    else
    {
     return array('status'=>true);
    }
}




//////////////////////////////////////////////////////
//Orderlist数据表，用于保存用户的购买订单记录；
/* Orderlist数据表结构；
CREATE TABLE `tb_orderlist` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `userid` int(11) DEFAULT NULL,购买者userid
  `username` varchar(255) DEFAULT NULL,购买者姓名
  `ordid` varchar(255) DEFAULT NULL,订单号
  `ordtime` int(11) DEFAULT NULL,订单时间
  `productid` int(11) DEFAULT NULL,产品ID
  `ordtitle` varchar(255) DEFAULT NULL,订单标题
  `ordbuynum` int(11) DEFAULT '0',购买数量
  `ordprice` float(10,2) DEFAULT '0.00',产品单价
  `ordfee` float(10,2) DEFAULT '0.00',订单总金额
  `ordstatus` int(11) DEFAULT '0',订单状态
  `payment_type` varchar(255) DEFAULT NULL,支付类型
  `payment_trade_no` varchar(255) DEFAULT NULL,支付接口交易号
  `payment_trade_status` varchar(255) DEFAULT NULL,支付接口返回的交易状态
  `payment_notify_id` varchar(255) DEFAULT NULL,
  `payment_notify_time` varchar(255) DEFAULT NULL,
  `payment_buyer_email` varchar(255) DEFAULT NULL,
  `ordcode` varchar(255) DEFAULT NULL,       //这个字段不需要的，大家看我西面的修正补充部分的说明！
  `isused` int(11) DEFAULT '0',
  `usetime` int(11) DEFAULT NULL,
  `checkuser` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

*/
//在线交易订单支付处理函数
//函数功能：根据支付接口传回的数据判断该订单是否已经支付成功；
//返回值：如果订单已经成功支付，返回true，否则返回false；
function checkorderstatus($ordid)
{
    $Ord=M('Orderlist');
    $ordstatus=$Ord->where('ordid='.$ordid)->getField('ordstatus');
    if($ordstatus==1)
    {
        return true;
    }
    else
    {
        return false;    
    }
}

//处理订单函数
//更新订单状态，写入订单支付后返回的数据
function orderhandle($parameter)
{
    $ordid=$parameter['out_trade_no'];
    $data['payment_trade_no']      =$parameter['trade_no'];
    $data['payment_trade_status']  =$parameter['trade_status'];
    $data['payment_notify_id']     =$parameter['notify_id'];
    $data['payment_notify_time']   =$parameter['notify_time'];
    $data['payment_buyer_email']   =$parameter['buyer_email'];
    $data['ordstatus']             =1;
    $Ord=M('Orderlist');
    $Ord->where('ordid='.$ordid)->save($data);
} 



/*-----------------------------------
2013.8.13更正
下面这个函数，其实不需要，大家可以把他删掉，
具体看我下面的修正补充部分的说明
------------------------------------*/

//获取一个随机且唯一的订单号；
function getordcode()
{
    $Ord=M('Orderlist');
    $numbers = range (10,99);
    shuffle ($numbers); 
    $code=array_slice($numbers,0,4); 
    $ordcode=$code[0].$code[1].$code[2].$code[3];
    $oldcode=$Ord->where("ordcode='".$ordcode."'")->getField('ordcode');
    if($oldcode)
    {
        getordcode();
    }
    else
    {
        return $ordcode;
    }
}



/**
 * [input_csv 解析csv数据]
 *
 * 方法一：
 * $csv = array_map('str_getcsv',file($_FILES['file']['tmp_name']));
 * str_getcsv php5.3添加的函数 解析csv 映射成数组
 * 
 * 方法二：
 * fgetcsv(file,length,separator,enclosure)
 * 说明：http://www.w3school.com.cn/php/func_filesystem_fgetcsv.asp
 *
 *
 * file     必需。规定要检查的文件。
 * length   可选。规定行的最大长度。必须大于 CVS 文件内最长的一行。
 *          在 PHP 5 中该参数是可选的。在 PHP 5 之前是必需的。
 *          如果忽略（在 PHP 5.0.4 以后的版本中设为 0）该参数的话，那么长度就没有限制，不过可能会影响执行效率。
 * separator 可选。设置字段分界符（只允许一个字符），默认值为逗号。
 * enclosure 可选。设置字段环绕符（只允许一个字符），默认值为双引号。
 *          该参数是在 PHP 4.3.0 中添加的。
 *
 * $handle = fopen($filename, 'r'); 
 * $result = input_csv($handle); //解析csv 
 * $lenResult = count($result); 
 * if($lenResult==0)
 * { 
 *   echo '没有任何数据！'; 
 *   exit; 
 * } 
 * for ($i = 1; $i < $lenResult; $i++) 
 * { //循环获取各字段值 
 *   $name = iconv('gb2312', 'utf-8', $result[$i][0]); //中文转码 
 *   $sex = iconv('gb2312', 'utf-8', $result[$i][1]); 
 *   $age = $result[$i][2]; 
 *   $dataVlues .= "('$name','$sex','$age'),"; 
 * } 
 * $dataVlues = substr($dataVlues,0,-1); //去掉最后一个逗号 
 * fclose($handle); //关闭指针 
 * 
 *
 *
 * 
 * @param  [type] $handle [description]
 * @return [type]         [description]
 */
function input_csv($handle) 
{ 
    $out = array (); 
    $n = 0; 
    while ($data = fgetcsv($handle, 10000)) 
    { 
        $num = count($data); 
        for ($i = 0; $i < $num; $i++) 
        { 
            $out[$n][$i] = $data[$i]; 
        } 
        $n++; 
    } 
    return $out; 
} 



